import threading
import time
"""python 的多线程 threading 有时候并不是特别理想. 最主要的原因是就是, 
Python 的设计上, 有一个必要的环节, 就是 Global Interpreter Lock (GIL). 
这个东西让 Python 还是一次性只能处理一个东西.
尽管Python完全支持多线程编程， 但是解释器的C语言实现部分在完全并行执行时并不是线程安全的。
 实际上，解释器被一个全局解释器锁保护着，它确保任何时候都只有一个Python线程执行。 
 GIL最大的问题就是Python的多线程程序并不能利用多核CPU的优势 （比如一个使用了多个线程的计算密集型程序只会在一个单CPU上面运行）。"""
# 由于以上原因 下面的代码在运行时，threading.enumerate()总是只会显示一个线程

def helloTask():
    time.sleep(2)
    print("hello")
    print(threading.enumerate())


def byebyeTask():
    print("byebye")
    print(threading.enumerate())


if __name__ == '__main__':
    print(threading.activeCount())
    # 查看所有线程信息
    print(threading.enumerate())
    # 查看正在运行的线程
    print(threading.current_thread())

    # 创建线程
    threadHello =threading.Thread(target=helloTask())
    # 加入主线程
    threadHello.join()
    threadByebye = threading.Thread(target=byebyeTask())
    threadHello.start()
    threadByebye.start()

    # 线程测试
    for i in range(10):
        if i%2==0:
            threadTmp=threading.Thread(target=helloTask())
        else:
            threadTmp=threading.Thread(target=byebyeTask())
        threadTmp.start()

